#第6章 条件、循环和其他语句
#! /usr/bin/python3 #建议加上这一句，否则代码移植到linux时，会找不到解释器
# -*- coding:UTF-8 -*- #建议加上这一句，否则有中文时容易出现乱码
import math
r=5
print(math.pi)
print("半径是5的圆的面积是：%.2f"%(math.pi*r**2))

#另一种导入包的方式
from math import pi
r=5
print(pi)#这种导入方式，可以直接使用sub_modelname，而不必使用modelname
print("半径是5的圆的面积是：%.2f"%(pi*r**2))

print("---------搜索路径---------")
import sys
print(sys.path)

print("---------导入多个模块---------")
from math import pi,sin
print(pi)
print(sin(30))

print("---------导入全部---------")
from math import *

print("起别名")
from math import pi as p
print(p)

print("---------使用逗号输出---------")
print("我是小智","，我来自未来")
name = "我是小智"
introduce = ",我是一名工程师"
comefrome = ",我来自未来"
print(name,introduce,comefrome)

print("---------序列解包---------")
x,y,z = 1,2,3
print("x=",x)
print("y=",y)
print("z=",z)
print(x,y,z)

a,b,c = "a","b","c"
print(a,b,c)

student = {'name':"小明",'age':23}
#Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
#如果字典已经为空，却调用了此方法，就报出KeyError异常。
#返回一个键值对(key,value)形式。
key,value = student.popitem()
print(key)
print(value)
print(student)

#x,y,z = 1,2
#print(x,y,z)

print('---------链式赋值---------')
x=y=z=123
print(x,y,z)
y=456
print(x,y,z)

print('---------增量赋值---------')
x=0
x+=1
print(x)
x*=10
print(x)

str='hello'
str+=' world'
print(str)
str*=2
print(str)

print('---------语句块---------')
a=3
if a==3:
    print('a==3')
    print('这是一个语句块')
a=4#这时语句块已经结束了

print('---------布尔值---------')
print(True == 0)
print(True == 1)
print(False == 0)
print(False + True + 2)
print(False)
print(True)

print('---------bool()函数---------')
print(bool('abc'))
print(bool(0))

print('---------if表达式---------')
#greeting = 'hello'
greeting = 'hello1'
#greeting = 'hello2'
if greeting == 'hello':
    print('hello的长度是：%d'%len(greeting))
elif greeting == 'hello1':
    print('greeting变量的值是：%s'%greeting)
else:
    print('字符串不等于hello')

print('---------IS 运算符---------')
x=y=(1,2,3)
z=(1,2,3)
print(x is y)
print(x is z)

print('---------比较字符串和序列---------')
print([1,2] < [2,1])
print([1,2] == [1,2])

print('---------assert 断言---------')
x=3
#assert x<0,'x is not zero not negative'
#assert x%2==0,'x不是偶数'

print('---------while循环---------')
x=0
while x<5:
    print('x=',x)
    x+=1

print('---------for 循环---------')
print('---------循环字符串-------------')
for letter in 'goods':
    print('当前字母是：',letter)
print('---------循环数字序列-------------')
numbers = [1,2,3,4,5]
for number in numbers:
    print('当前数字是：%d'%number)
print('---------循环字典-------------')
dictionary = {'name':'小明','age':23,'性别':'男','爱好':'女'}
for dict in dictionary:
    print('当前字典的值是：%s=%s'%(dict,dictionary[dict]))
print('---------循环字典,使用序列解包-------------')
for key,value in dictionary.items():
    print('%s:%s'%(key,value))

print('----------并行迭代-------------')
for num1,num2 in zip(range(3),range(100)):
    print('number=',num1)

print('----------反转和排序迭代-------------')
print(sorted([5,3,7,1]))
print(sorted('hello world!'))
print(list(reversed('hello world')))
print(''.join(reversed('hello world')))

print('-------------习题1---------------------')
# #猜数字的游戏，猜大了提示大了，猜小了提示小了，猜对了提示对了，并告知猜了几次
# import random
# random_num = random.randint(1,10)
# input_num = input('你猜我手里的1-10的数字是多少？')
# i=0
# while True:
#     if not input_num.isdigit():
#         print('输入的不是数字')
#         break
#     input_num_int = int(input_num)
#     i+=1
#     if input_num_int > random_num:
#         input_num = input('你猜大了，再给你一次机会')
#     elif input_num_int < random_num:
#         input_num = input('你猜小了，再给你一次机会')
#     else:
#         print('恭喜你，猜对了！你一共猜了%d次'%i)
#         break

print('-------------习题2---------------------')
#如果一个n位正整数等于各位数字n次方的和，就称该数为阿姆斯特朗数。例如：1^3+5^3+3^3=153
#1000以内的阿姆斯特朗数还有：1、2、3、4、5、6、7、8、9、153、370、371、407
#写一个程序，判断输入的数字是否是阿姆斯特朗数
input_num = input('请输入一个阿姆斯特朗数')
comput_result = 0
length = len(input_num)
if input_num.isdigit():
    for letter in input_num:
        comput_result += int(letter)**length
    if comput_result == int(input_num):
        print('你输入的数字',input_num,'各位相加的结果是',comput_result,'，是阿姆斯特朗数')
    else:
        print('你输入的数字',input_num,'各位相加的结果是',comput_result,'，不是阿姆斯特朗数')
else:
    print('输入的不是数字！')